package com.wh.wisdomsite.xbox.common.error;

import com.wh.wisdomsite.xbox.utils.Const;

import java.util.EnumMap;

/**
 * 自定义主错误类型
 * @Package com.wh.wisdomsite.xbox.common.error
 * @author 谢泽鹏
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public enum MainErrorType {


    //当前服务不可用
    SERVICE_CURRENTLY_UNAVAILABLE,

    //服务不允许
    INSUFFICIENT_ISV_PERMISSIONS,

    //用户不允许
    INSUFFICIENT_USER_PERMISSIONS,

    //文件上传失败
    UPLOAD_FAIL,

    //HttpAction不允许
    HTTP_ACTION_NOT_ALLOWED,

    //失效编码
    INVALID_ENCODING,

    //请求不允许(禁用)
    FORBIDDEN_REQUEST,

    //服务方法已不可用
    METHOD_OBSOLETED,

    //业务逻辑错误
    BUSINESS_LOGIC_ERROR,

    //会话丢失
    MISSING_SESSION,

    //会话失效
    INVALID_SESSION,

    //秘钥丢失
    MISSING_APP_KEY,

    //秘钥失效
    INVALID_APP_KEY,

    //签名丢失
    MISSING_SIGNATURE,

    //签名失效
    INVALID_SIGNATURE,

    //方法丢失
    MISSING_METHOD,

    //方法失效
    INVALID_METHOD,

    //版本丢失
    MISSING_VERSION,

    //版本失效
    INVALID_VERSION,

    //不支持(提供)版本
    UNSUPPORTED_VERSION,

    //失效格式
    INVALID_FORMAT,

    //丢失必要参数
    MISSING_REQUIRED_ARGUMENTS,

    //失效参数
    INVALID_ARGUMENTS,

    //超过用户调用次数
    EXCEED_USER_INVOKE_LIMITED,

    //超过会话访问次数
    EXCEED_SESSION_INVOKE_LIMITED,

    //超过方法调用次数
    EXCEED_METHOD_INVOKE_LIMITED,

    //超过方法调用频率次数
    EXCEED_METHOD_INVOKE_FREQUENCY_LIMITED,

    //超过应用次数
    EXCEED_APP_INVOKE_LIMITED,

    //超过应用调用频率次数
    EXCEED_APP_INVOKE_FREQUENCY_LIMITED,

    //缺失绑定参数
    MISSING_BINDOBJECT,

    //请求超时
    REQUEST_TIMEOUT,

    //请求重复提交
    REQUEST_REPEAT_COMMIT,

    //应用平台缺失
    MISSING_CLIENT,

    //应用类型缺失
    MISSING_CALL_TYPE,

    //失效应用类型
    INVALID_CALL_TYPE,

    //应用版本丢失
    MISSING_CALL_VERSION;


    //存放错误类型集合
    private static final EnumMap<MainErrorType, String> ERROR_CODE_TYPE = new EnumMap<MainErrorType, String>(MainErrorType.class);


    //业务系统错误代码定义
    static {

        //当前服务不可用
        ERROR_CODE_TYPE.put(MainErrorType.SERVICE_CURRENTLY_UNAVAILABLE, Const.SERVICE_CURRENTLY_UNAVAILABLE);

        //服务不允许
        ERROR_CODE_TYPE.put(MainErrorType.INSUFFICIENT_ISV_PERMISSIONS, Const.INSUFFICIENT_ISV_PERMISSIONS);

        //用户不允许
        ERROR_CODE_TYPE.put(MainErrorType.INSUFFICIENT_USER_PERMISSIONS, Const.INSUFFICIENT_USER_PERMISSIONS);

        //文件上传失败
        ERROR_CODE_TYPE.put(MainErrorType.UPLOAD_FAIL, Const.UPLOAD_FAIL);

        //HttpAction不允许
        ERROR_CODE_TYPE.put(MainErrorType.HTTP_ACTION_NOT_ALLOWED, Const.HTTP_ACTION_NOT_ALLOWED);

        //编码失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_ENCODING, Const.INVALID_ENCODING);

        //请求不允许(禁用)
        ERROR_CODE_TYPE.put(MainErrorType.FORBIDDEN_REQUEST, Const.FORBIDDEN_REQUEST);

        //服务方法已不可用
        ERROR_CODE_TYPE.put(MainErrorType.METHOD_OBSOLETED, Const.METHOD_OBSOLETED);

        //业务逻辑错误
        ERROR_CODE_TYPE.put(MainErrorType.BUSINESS_LOGIC_ERROR, Const.BUSINESS_LOGIC_ERROR);

        //请求重复提交
        ERROR_CODE_TYPE.put(MainErrorType.REQUEST_REPEAT_COMMIT, Const.REQUEST_REPEAT_COMMIT);

        //会话丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_SESSION, Const.MISSING_SESSION);

        //会话失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_SESSION, Const.INVALID_SESSION);

        //秘钥丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_APP_KEY, Const.MISSING_APP_KEY);

        //秘钥失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_APP_KEY, Const.INVALID_APP_KEY);

        //签名丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_SIGNATURE, Const.MISSING_SIGNATURE);

        //签名失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_SIGNATURE, Const.INVALID_SIGNATURE);

        //方法丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_METHOD, Const.MISSING_METHOD);

        //方法失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_METHOD, Const.INVALID_METHOD);

        //版本丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_VERSION, Const.MISSING_VERSION);

        //版本失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_VERSION, Const.INVALID_VERSION);

        //不支持(提供)版本
        ERROR_CODE_TYPE.put(MainErrorType.UNSUPPORTED_VERSION, Const.UNSUPPORTED_VERSION);

        //数据格式错误
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_FORMAT, Const.INVALID_FORMAT);

        //丢失必要参数
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_REQUIRED_ARGUMENTS, Const.MISSING_REQUIRED_ARGUMENTS);

        //参数失效
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_ARGUMENTS, Const.INVALID_ARGUMENTS);

        //超过用户调用次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_USER_INVOKE_LIMITED, Const.EXCEED_USER_INVOKE_LIMITED);

        //超过会话访问次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_SESSION_INVOKE_LIMITED, Const.EXCEED_SESSION_INVOKE_LIMITED);

        //超过应用次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_APP_INVOKE_LIMITED, Const.EXCEED_APP_INVOKE_LIMITED);

        //超过应用调用频率次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_APP_INVOKE_FREQUENCY_LIMITED, Const.EXCEED_APP_INVOKE_FREQUENCY_LIMITED);

        //缺失绑定参数
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_BINDOBJECT, Const.MISSING_BINDOBJECT);

        //超过方法调用次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_METHOD_INVOKE_LIMITED, Const.EXCEED_METHOD_INVOKE_LIMITED);

        //超过方法调用频率次数
        ERROR_CODE_TYPE.put(MainErrorType.EXCEED_METHOD_INVOKE_FREQUENCY_LIMITED, Const.EXCEED_METHOD_INVOKE_FREQUENCY_LIMITED);

        //请求超时
        ERROR_CODE_TYPE.put(MainErrorType.REQUEST_TIMEOUT, Const.REQUEST_TIMEOUT);

        //应用平台缺失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_CLIENT, Const.MISSING_CLIENT);

        //应用类型缺失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_CALL_TYPE, Const.MISSING_CALL_TYPE);

        //失效的应用类型
        ERROR_CODE_TYPE.put(MainErrorType.INVALID_CALL_TYPE, Const.INVALID_CALL_TYPE);

        //应用版本丢失
        ERROR_CODE_TYPE.put(MainErrorType.MISSING_CALL_VERSION, Const.MISSING_CALL_VERSION);

    }


    /**
     * 获取错误
     * @return
     */
    public String value() {
        return ERROR_CODE_TYPE.get(this);
    }
}
